Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / pwa / swShellRuntime.js

Displaying Raw • Download


meshchatx/src/frontend/js/pwa/swShellRuntime.js dff83e198e78b84ec225e53ce3ab119f598b0a01 (dff83e19) Text, 7.67 KB

T8b949e// SPDX-License-Identifier: 0BSD

Tff7b72import Tb4b4b4{ Te6edf3NAV_NETWORK_TIMEOUT_MSTb4b4b4, Te6edf3SHELL_CACHE_PREFIXTb4b4b4, Te6edf3classifyShellRequest Tb4b4b4} Tff7b72from Ta5d6ff"./swCachePolicy.js"Tb4b4b4;

Tff7b72export Tff7b72const Te6edf3SHELL_FALLBACK_URL Tff7b72= Ta5d6ff"/"Tb4b4b4;
Tff7b72export Tff7b72const Te6edf3UPDATE_MESSAGE_TYPE Tff7b72= Ta5d6ff"meshchatx-sw-updated"Tb4b4b4;

T8b949e/**
* Independent accept/reject oracle for shell caching.
* Predicts strategy from raw inputs without calling classifyShellRequest.
* @param {{ method?: string, pathname?: string, mode?: string, destination?: string, accept?: string }} input
* @returns {"bypass"|"asset"|"navigation"|"shell-helper"|"network-only"}
*/
Tff7b72export Tff7b72function Te6edf3oracleExpectedStrategyTb4b4b4(Te6edf3inputTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3method Tff7b72= Te6edf3inputTb4b4b4.Te6edf3method Tff7b72|| Ta5d6ff"GET"Tb4b4b4;
Tff7b72const Te6edf3pathname Tff7b72= Tffa657StringTb4b4b4(Te6edf3inputTb4b4b4.Te6edf3pathname Tff7b72|| Ta5d6ff"/"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3method Tff7b72!== Ta5d6ff"GET" Tff7b72&& Te6edf3method Tff7b72!== Ta5d6ff"HEAD"Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"bypass"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/api" Tff7b72|| Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/api/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"bypass"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/ws" Tff7b72|| Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/ws/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"bypass"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/service-worker.js"Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"bypass"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/assets" Tff7b72|| Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/assets/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"asset"Tb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3navigate Tff7b72=
Te6edf3inputTb4b4b4.Te6edf3mode Tff7b72=== Ta5d6ff"navigate" Tff7b72||
Te6edf3inputTb4b4b4.Te6edf3destination Tff7b72=== Ta5d6ff"document" Tff7b72||
Tb4b4b4(Tff7b72typeof Te6edf3inputTb4b4b4.Te6edf3accept Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3inputTb4b4b4.Te6edf3acceptTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"text/html"Tb4b4b4)Tb4b4b4) Tff7b72||
Te6edf3pathname Tff7b72=== Ta5d6ff"/" Tff7b72||
Te6edf3pathname Tff7b72=== Ta5d6ff"/index.html"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3navigateTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"navigation"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3pathname Tff7b72=== Ta5d6ff"/boot-theme.js" Tff7b72||
Te6edf3pathname Tff7b72=== Ta5d6ff"/manifest.json" Tff7b72||
Te6edf3pathname Tff7b72=== Ta5d6ff"/favicons" Tff7b72||
Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/favicons/"Tb4b4b4) Tff7b72||
Ta5d6ff/favicon/iTb4b4b4.Te6edf3testTb4b4b4(Te6edf3pathnameTb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"shell-helper"Tb4b4b4;
Tb4b4b4}
Tff7b72return Ta5d6ff"network-only"Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {string[]} cacheKeys
* @param {string} prefix
* @param {string} currentName
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3selectCachesToDeleteTb4b4b4(Te6edf3cacheKeysTb4b4b4, Te6edf3prefixTb4b4b4, Te6edf3currentNameTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3keys Tff7b72= Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3cacheKeysTb4b4b4) Tff7b72? Te6edf3cacheKeys Tff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72return Te6edf3keysTb4b4b4.Te6edf3filterTb4b4b4(Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Tff7b72typeof Te6edf3key Tff7b72=== Ta5d6ff"string" Tff7b72&& Te6edf3keyTb4b4b4.Te6edf3startsWithTb4b4b4(Te6edf3prefixTb4b4b4) Tff7b72&& Te6edf3key Tff7b72!== Te6edf3currentNameTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {Iterable<string>} urls
* @returns {string[]}
*/
Tff7b72export Tff7b72function Te6edf3findForbiddenCachedUrlsTb4b4b4(Te6edf3urlsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3leaked Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3raw Tff7b72of Te6edf3urls Tff7b72|| Tb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3pathname Tff7b72= Tffa657StringTb4b4b4(Te6edf3raw Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3pathnameTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"://"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3pathname Tff7b72= Tff7b72new Te6edf3URLTb4b4b4(Te6edf3pathnameTb4b4b4)Tb4b4b4.Te6edf3pathnameTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// keep raw
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3pathname Tff7b72=== Ta5d6ff"/api" Tff7b72|| Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/api/"Tb4b4b4) Tff7b72|| Te6edf3pathname Tff7b72=== Ta5d6ff"/ws" Tff7b72|| Te6edf3pathnameTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"/ws/"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3leakedTb4b4b4.Te6edf3pushTb4b4b4(Te6edf3pathnameTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3leakedTb4b4b4;
Tb4b4b4}

T8b949e/**
* Create injectable shell cache strategies for the service worker (and tests).
* @param {{
* caches: CacheStorage,
* fetch: typeof fetch,
* cacheName: string,
* origin: string,
* shellFallbackUrl?: string,
* navTimeoutMs?: number,
* setTimeout?: typeof setTimeout,
* clearTimeout?: typeof clearTimeout,
* }} options
*/
Tff7b72export Tff7b72function Te6edf3createShellRuntimeTb4b4b4(Te6edf3optionsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cachesApi Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3cachesTb4b4b4;
Tff7b72const Te6edf3fetchFn Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3fetchTb4b4b4;
Tff7b72const Te6edf3cacheName Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3cacheNameTb4b4b4;
Tff7b72const Te6edf3origin Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3originTb4b4b4;
Tff7b72const Te6edf3shellFallbackUrl Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3shellFallbackUrl Tff7b72|| Te6edf3SHELL_FALLBACK_URLTb4b4b4;
Tff7b72const Te6edf3navTimeoutMs Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3navTimeoutMs Tff7b72?? Te6edf3NAV_NETWORK_TIMEOUT_MSTb4b4b4;
Tff7b72const Te6edf3setTimeoutFn Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3setTimeout Tff7b72|| Te6edf3setTimeoutTb4b4b4;
Tff7b72const Te6edf3clearTimeoutFn Tff7b72= Te6edf3optionsTb4b4b4.Te6edf3clearTimeout Tff7b72|| Te6edf3clearTimeoutTb4b4b4;

Tff7b72async Tff7b72function Te6edf3putInCacheTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3responseTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3response Tff7b72|| Tff7b72!Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3cache Tff7b72= Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3openTb4b4b4(Te6edf3cacheNameTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3cacheTb4b4b4.Te6edf3putTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3responseTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3cacheShellSnapshotTb4b4b4(Te6edf3responseTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3response Tff7b72|| Tff7b72!Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3cache Tff7b72= Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3openTb4b4b4(Te6edf3cacheNameTb4b4b4)Tb4b4b4;
Tff7b72await Te6edf3cacheTb4b4b4.Te6edf3putTb4b4b4(Te6edf3shellFallbackUrlTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3cloneTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3networkWithTimeoutTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3timeoutMsTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3controller Tff7b72= Tff7b72new Te6edf3AbortControllerTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3timer Tff7b72= Te6edf3setTimeoutFnTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Te6edf3controllerTb4b4b4.Te6edf3abortTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3timeoutMsTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72return Tff7b72await Te6edf3fetchFnTb4b4b4(Te6edf3requestTb4b4b4, Tb4b4b4{ Te6edf3signalTff7b72: Te6edf3controllerTb4b4b4.Te6edf3signal Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3clearTimeoutFnTb4b4b4(Te6edf3timerTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3cacheFirstTb4b4b4(Te6edf3requestTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cached Tff7b72= Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3matchTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3cachedTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3cachedTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Te6edf3fetchFnTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3response Tff7b72&& Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3putInCacheTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3cloneTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3responseTb4b4b4;
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3staleWhileRevalidateTb4b4b4(Te6edf3requestTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3cache Tff7b72= Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3openTb4b4b4(Te6edf3cacheNameTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3cached Tff7b72= Tff7b72await Te6edf3cacheTb4b4b4.Te6edf3matchTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3networkPromise Tff7b72= Te6edf3fetchFnTb4b4b4(Te6edf3requestTb4b4b4)
Tb4b4b4.Te6edf3thenTb4b4b4(Tb4b4b4(Te6edf3responseTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3response Tff7b72&& Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72void Te6edf3cacheTb4b4b4.Te6edf3putTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3responseTb4b4b4.Te6edf3cloneTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3responseTb4b4b4;
Tb4b4b4}Tb4b4b4)
Tb4b4b4.Tff7b72catchTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72nullTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3cachedTb4b4b4) Tb4b4b4{
Tff7b72void Te6edf3networkPromiseTb4b4b4;
Tff7b72return Te6edf3cachedTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3networkResponse Tff7b72= Tff7b72await Te6edf3networkPromiseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3networkResponseTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3networkResponseTb4b4b4;
Tb4b4b4}
Tff7b72throw Tff7b72new Tf85149ErrorTb4b4b4(Ta5d6ff"shell helper unavailable"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3networkFirstNavigationTb4b4b4(Te6edf3eventLikeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3request Tff7b72= Te6edf3eventLikeTb4b4b4.Te6edf3requestTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72let Te6edf3response Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eventLikeTb4b4b4.Te6edf3preloadResponseTb4b4b4) Tb4b4b4{
Te6edf3response Tff7b72= Tff7b72await Te6edf3eventLikeTb4b4b4.Te6edf3preloadResponseTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3responseTb4b4b4) Tb4b4b4{
Te6edf3response Tff7b72= Tff7b72await Te6edf3networkWithTimeoutTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3navTimeoutMsTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3response Tff7b72&& Te6edf3responseTb4b4b4.Te6edf3okTb4b4b4) Tb4b4b4{
Tff7b72await Te6edf3cacheShellSnapshotTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3cloneTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3responseTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// fall through to cache
Tb4b4b4}
Tff7b72const Te6edf3cached Tff7b72= Tb4b4b4(Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3matchTb4b4b4(Te6edf3shellFallbackUrlTb4b4b4)Tb4b4b4) Tff7b72|| Tb4b4b4(Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3matchTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3cachedTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3cachedTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3fetchFnTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72async Tff7b72function Te6edf3pruneOldShellCachesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3keys Tff7b72= Tff7b72await Te6edf3cachesApiTb4b4b4.Te6edf3keysTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3doomed Tff7b72= Te6edf3selectCachesToDeleteTb4b4b4(Te6edf3keysTb4b4b4, Te6edf3SHELL_CACHE_PREFIXTb4b4b4, Te6edf3cacheNameTb4b4b4)Tb4b4b4;
Tff7b72await Tffa657PromiseTb4b4b4.Te6edf3allTb4b4b4(Te6edf3doomedTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4=> Te6edf3cachesApiTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3doomedTb4b4b4;
Tb4b4b4}

T8b949e/**
* @param {Request} request
* @param {{ preloadResponse?: Promise<Response|null> }} [eventExtras]
* @returns {Promise<Response>|null} null means network bypass (do not respondWith)
*/
Tff7b72function Te6edf3resolveFetchTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3eventExtras Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72let Te6edf3urlTb4b4b4;
Tff7b72try Tb4b4b4{
Te6edf3url Tff7b72= Tff7b72new Te6edf3URLTb4b4b4(Te6edf3requestTb4b4b4.Te6edf3urlTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3urlTb4b4b4.Te6edf3origin Tff7b72!== Te6edf3originTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3kind Tff7b72= Te6edf3classifyShellRequestTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Ta5d6ff"bypass" Tff7b72|| Te6edf3kind Tff7b72=== Ta5d6ff"network-only"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Ta5d6ff"asset"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3cacheFirstTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Ta5d6ff"shell-helper"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3staleWhileRevalidateTb4b4b4(Te6edf3requestTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3kind Tff7b72=== Ta5d6ff"navigation"Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3networkFirstNavigationTb4b4b4(Tb4b4b4{ Te6edf3requestTb4b4b4, Te6edf3preloadResponseTff7b72: Te6edf3eventExtrasTb4b4b4.Te6edf3preloadResponse Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}

Tff7b72return Tb4b4b4{
Te6edf3cacheFirstTb4b4b4,
Te6edf3staleWhileRevalidateTb4b4b4,
Te6edf3networkFirstNavigationTb4b4b4,
Te6edf3pruneOldShellCachesTb4b4b4,
Te6edf3putInCacheTb4b4b4,
Te6edf3cacheShellSnapshotTb4b4b4,
Te6edf3resolveFetchTb4b4b4,
Te6edf3cacheNameTb4b4b4,
Te6edf3shellFallbackUrlTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────